package com.zhongge.user;

import com.zhongge.book.Book;
import com.zhongge.book.Library;

import java.time.LocalDate;
import java.util.Scanner;

/**
 * @ClassName AdminUser
 * @Description TODO 管理员类
 * @Author zhongge
 * @Version 1.0
 */
@SuppressWarnings("all")
public class AdminUser extends User{
    Scanner scanner = new Scanner(System.in);
    Library library = Library.getLibraryInstance();//该对象用于本类调用Library中的其他方法
    public AdminUser(String name, int userID) {
        //第三个参数直接写死：是管理员
        super(name, userID, "管理员");
    }

    @Override
    public String toString() {
        return "AdminUser{" +
                "name='" + name + '\'' +
                ", userID=" + userID +
                ", role='" + role + '\'' +
                '}';
    }

    /**
     * 管理员的菜单方法
     * @return 选择的菜单
     */
    @Override
    public int menu() {
        System.out.println("管理员" + name + "的操作菜单");
        System.out.println("1. 查找图书");
        System.out.println("2. 打印所有的图书");
        System.out.println("3. 退出系统");
        System.out.println("4. 上架图书");
        System.out.println("5. 修改图书");
        System.out.println("6. 下架图书");
        System.out.println("7. 统计借阅次数");
        System.out.println("8. 查看最受欢迎的前K本书");
        System.out.println("9. 查看库存状态");
        System.out.println("10. 检查超过一年未下架的图书");
        System.out.println("请选择你的操作：");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }

    /*****************管理员特有的方法****************/

    //管理员和普通用户特有的方法到时候放在Library中
    //4.上架图书
    public void addBook() {
        //在这里完成业务逻辑框架
        System.out.println("请输入书名：");
        String title = scanner.nextLine();  // 输入书名
        System.out.println("请输入作者：");
        String author = scanner.nextLine();  // 输入作者
        System.out.println("请输入类别：");
        String category = scanner.nextLine();  // 输入图书类别
        System.out.println("请输入出版年份：");
        int year = scanner.nextInt();  // 输入出版年份

        LocalDate shelfDate = LocalDate.now();  // 当前时间作为上架时间
        Book newBook = new Book(title, author, category, year, shelfDate);  // 创建新书对象

        //将书添加到书架上
        library.addBook(newBook);
    }
    //5.修改图书
    public void modifyBook() {
        //修改业务：
        System.out.println("目前所有书籍信息如下：");
        library.displayBooks();
        System.out.println("请输入要修改的图书id：");
        int bookId = scanner.nextInt();

        scanner.nextLine();

        Book book = library.searchById(bookId);
        if(book == null) {
            System.out.println("没有你要修改的图书ID"+bookId);
            return;
        }

        //修改菜单：选择要修改的内容
        while (true) {
            int choice = selectModify();

            switch (choice) {
                case 0:
                    System.out.println("已经退出修改图书的选择！！");
                    return;
                case 1:
                    scanner.nextLine();//清空缓冲区
                    System.out.println("请输入你要修改的书名：");
                    String bookName = scanner.nextLine();
                    library.modifyBookName(book, bookName);
                    break;
                case 2:
                    scanner.nextLine();//清空缓冲区
                    System.out.println("请输入你要修改的作者：");
                    String author = scanner.nextLine();
                    library.modifyBookAuthor(book, author);
                    break;
                case 3:
                    scanner.nextLine();//清空缓冲区
                    System.out.println("请输入你要修改的类型：");
                    String type = scanner.nextLine();
                    library.modifyBookType(book, type);
                    break;
                case 4:
                    scanner.nextLine();//清空缓冲区
                    System.out.println("请输入你要修改的出版时间：");
                    int publishYear = scanner.nextInt();
                    library.modifyBookPublishYear(book, publishYear);
                    break;
                case 5:
                    scanner.nextLine();//清空缓冲区
                    System.out.println("请输入你要修改的上架时间的 年：");
                    int year = scanner.nextInt();
                    System.out.println("请输入你要修改的上架时间的 月：");
                    int month = scanner.nextInt();
                    System.out.println("请输入你要修改的上架时间的 日：");
                    int day = scanner.nextInt();
                    LocalDate localDate = LocalDate.of(year, month, day);
                    library.modifyBookShelfDate(book, localDate);
                    break;
            }
        }
    }

    /**
     * 选择修改的选项
     * @return
     */
    private int selectModify(){
        System.out.println("请输入你要修改的菜单：");
        System.out.println("1. 修改书本名称");
        System.out.println("2. 修改书本作者");
        System.out.println("3. 修改书本类型");
        System.out.println("4. 修改出版时间");
        System.out.println("5. 修改上架时间");
        System.out.println("0. 退出选择！");
        int choice = scanner.nextInt();
        return choice;
    }

    //6.下架图书
    public void deleteBook() {
        System.out.println("目前所有书籍信息如下：");
        library.displayBooks();

        System.out.println("请输入要下架的图书id：");
        int bookId = scanner.nextInt();

//        scanner.nextLine();


        //根据图书id找图书
        Book deleteBook = library.searchById(bookId);
        if(deleteBook == null) {
            System.out.println("没有你要删除的图书...");
            return;
        }

        //如果程序走到这里说明存在该图书
        //那么就根据该图书id删除图书
        library.deleteBook(deleteBook.getBookId());

        System.out.println("删除图书成功....");

    }
    //7.统计借阅次数
    public void borrowCount() {
        library.borrowCount();
    }
    //8.查看最受欢迎的前n本书
    public void popularBook() {
        System.out.println("请输入你要查看的最受欢迎的前n本书,注意n值不能超过：" + "‘" +library.getBookCount() + "’");
        int n = scanner.nextInt();

        if(n <= 0 || n > library.getBookCount()) {
            System.out.println("没有最受欢迎的前"+ n +"本书！");
            return;
        }

        library.popularBook(n);
    }
    //9.查看库存状态
    public void inventoryStatus() {
        library.inventoryStatus();
    }
    //10.检查并移除上架超过一年的书
    public void checkAndRemoveOldBooks() {//检查并移除书籍
        library.checkAndRemoveOldBooks();
    }
    /*****************end**************************/
}
